//
//  GCDTimer.h
//  App
//
//  Created by gome on 2018/12/12.
//  Copyright © 2018 gome. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN


/**
 定时器运行状态

 - GCDTimerStatusTypeDefault: 默认状态
 - GCDTimerStatusTypeRun:     运行状态
 - GCDTimerStatusTypeSuspend: 暂停状态
 - GCDTimerStatusTypeComplete:完成状态
 */
typedef NS_ENUM(NSUInteger, GCDTimerStatusType) {
    GCDTimerStatusTypeDefault,  /** 是否为默认状态*/
    GCDTimerStatusTypeRun,      /** 是否为运行状态*/
    GCDTimerStatusTypeSuspend,  /** 是否为暂停状态*/
    GCDTimerStatusTypeComplete  /** 是否为完成状态*/
};

@interface GCDTime : NSObject


/**
 小时
 */
@property (nonatomic, copy) NSString *hour;

/**
 分钟
 */
@property (nonatomic, copy) NSString *minute;

/**
 秒
 */
@property (nonatomic, copy) NSString *second;

/**
 毫秒
 */
@property (nonatomic, copy) NSString *milliSecond;
@end

/** 进度回调block*/
typedef void(^GCDProgressBlock)(GCDTime *progress);
/** 定时器完成回调block*/
typedef void(^GCDTimerCompletion)(void);

@interface GCDTimer : NSObject
/** 计时器是否为增加模式*/
@property (nonatomic, assign) BOOL isAscend;

/** 计时器的计时时间*/
@property (nonatomic, assign) NSTimeInterval timerInterval;

/** 计时器触发的精度，默认为100ms触发一次回调，取值区间为100-1000 */
@property (nonatomic, assign) NSInteger precision;

/** 计时器的回调block*/
@property (nonatomic, strong) GCDProgressBlock progressBlock;

/** 计时器完成的回调block*/
@property (nonatomic, strong) GCDTimerCompletion completion;

/** 计时器当前状态*/
@property (nonatomic, assign) GCDTimerStatusType status;

/**
 初始化计时器
 @param timeinterval 计时的时间
 @param isAscend 是否为增加计时
 @param progressBlock 进度回调
 @param completion 倒计时结束回调
 @return 计时器
 */
- (instancetype)initWithStartTimeinterval: (NSTimeInterval)timeinterval isAscend: (BOOL)isAscend progressBlock: (GCDProgressBlock)progressBlock completionBlock: (GCDTimerCompletion)completion;

/** 开始计时*/
- (void)resume;

/** 暂停计时*/
- (void)suspend;

/** 继续暂停的任务*/
- (void)activate;

/** 停止计时*/
- (void)stop;

/** 重置计时器并开始计时*/
- (void)restart;
@end

NS_ASSUME_NONNULL_END
